// 如果一个 struct 嵌套了另一个匿名结构体，那么这个结构可以直接访问匿名结构体的属性和方法，从而实现继承。
// 如果一个 struct 嵌套了多个匿名结构体，那么这个结构可以直接访问多个匿名结构体的属性和方法，从而实现多重继承。
// 如果一个 struct 嵌套了另一个有名的结构体，那么这个模式叫做组合。
package main

import "fmt"

func main() {
	cat := &Cat{
		Animal: Animal{
			Name: "cat",
		},
	}
	cat.Eat() // cat is eating
}

type Animal struct {
	Name string
}

func (a *Animal) Eat() {
	fmt.Printf("%v is eating", a.Name)
	fmt.Println()
}

type Cat struct {
	// 也可以嵌入类型指针
	// *Animal
	Animal
}
